#include"core.h"
#include<stdio.h>
#include<sys/time.h>
#include<signal.h>


void sig_handler(int signo){
    uint32_t mstat;
    // 定时器中断，设置中断位
    // 判断是否开启了全局中断
    mstat = export_read(CSR_MSTATUS);
    if((mstat & MSTATUS_MIE) == 0){
        // 全局中断未使能
        return;
    }
    // 全局中断使能,写中断标志
    mstat = export_read(CSR_MIE);
    if((mstat&MIE_MTIE )== 0){
        // 定时器中断未使能
        return;
    }
    // 挂起定时器中断
    mstat = export_read(CSR_MIP);
    mstat |= MIP_MTIP;
    export_write(CSR_MIP,mstat);
    // 设置中断原因
    // mstat = 7;
    // mstat |= MCAUSE_INT;
    // export_write(CSR_MCAUSE,mstat);
}

// 定时器初始化
void timer_init(void){
    struct itimerval itv;
    signal(SIGALRM,sig_handler);
    // itv.it_value.tv_usec = 1000000 / 1000;
    // itv.it_value.tv_sec = 0;
    // itv.it_interval.tv_sec = 0;
    // itv.it_interval.tv_usec = 1000000 / 1000;
    itv.it_value.tv_sec = 1;
    itv.it_value.tv_usec = 0;
    itv.it_interval.tv_sec = 1;
    itv.it_interval.tv_usec = 0;
    setitimer(ITIMER_REAL,&itv,NULL);
}